export default {
    namespaced: true,
    state: {
        list: uni.getStorageSync('hm-80') || []
    },
    getters: {
        totalNums(state) {
            let num = 0
            state.list.forEach(v => num += v.num)
            console.log(num);
            return num
        },
        // 选中商品的数组
        checkedCartList(state) {
            return state.list.filter(v => v.checked)
        },

        // 商品结算的价格
        // 勾选了的商品的总价
        checkedCartPrice(state, getters) {
            // 在一个getters里面来引入另外一个getters
            // 单价 * 数量
            return getters.checkedCartList.reduce((s, v) => s + v.num * v.goods_price, 0)
        },
        // 商品结算的总数
        checkedCartNum(state, getters) {
            // 在一个getters里面来引入另外一个getters
            return getters.checkedCartList.reduce((s, v) => s + v.num, 0)
        },
        // 全选
        allCheck(state, getters) {
            return state.list.length && state.list.length === getters.checkedCartList.length
        },

    },
    mutations: {
        addCart(state, payload) {
            // 那传递过来的商品和state中的购物车列表做比较
            const index = state.list.findIndex(v => v.goods_id === payload.goods_id)
            // console.log('看看索引', index);
            // 判断是否已经购买
            if (index === -1) {
                state.list.push({ ...payload, num: 1, checked: true })
            } else {
                state.list[index].num++
            }

            // 是 找到商品 数量++
            // 不是  就把当前的商品添加进去

            uni.setStorageSync('hm-80', state.list)
        },
        //购物车页面的选中
        CartCheck(state, payload) {
            // 更改选中项，
            state.list[payload].checked = !state.list[payload].checked
            // 本地存储
            uni.setStorageSync('hm-80', state.list)
        },
        // 主动点击全选按钮
        toggleCheck(state) {
            // console.log(this.getters);
            // console.log(this.getters['cart/allCheck']);
            // 复用getters里面的全选
            const allCheck = !this.getters['cart/allCheck']
            // 把数组里面的每一个元素遍历出来，拿到每一个checked = 上面的复用的的全选
            state.list.forEach(v => v.checked = allCheck);
            // 本地存储
            uni.setStorageSync('hm-80', state.list)
        },
        // 商品数量的改变
        changeNum(state, payload) {
            state.list[payload.index].num += payload.num
            // 本地存储
            uni.setStorageSync('hm-80', state.list)
        },
        deleteGoods(state, payload) {
            state.list.splice(payload, 1)
            // 本地存储
            uni.setStorageSync('hm-80', state.list)

        }

    },
    actions: {

    }
}
